using System;
using System.Collections.Generic;

namespace FluentIoC.Interfaces
{
    public interface IIoCConfiguration
    {
        IContainer Container { get; }

        void RegisterFactory(string key, Type type);
        void RegisterComponent(string key, Type component);
        void RegisterService(string key, Type service, Type component);

        void RegisterComponent(string key, Type component, Dictionary<string, string> parameters,
                               Lifestyle lifestyle, Type factory, string factoryCreate
        );

        void RegisterService(string key, Type service, Type component,Dictionary<string, string> parameters, 
                             Lifestyle lifestyle, Type factory, string factoryCreate
        );
    }

    public enum Lifestyle
    {
        Transient = 0,
        Singleton = 1,
        Thread = 2,
        Pooled = 3,
        PerWebRequest = 4,
        Undefined = 5
    }
}